package com.swa99ylum.pxf.cell.styler;

import java.util.Map;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;

/**
 * 样式器：根据 开发者 定义的 逻辑（即 函数式），为 cell 设置 样式
 * <br> 可以：
 * <br> a) 通过 cellAddress 从 styleMap 获取想要的 XSSFCellStyle
 * <br> b) 根据 (XSSFCell cell, Object cellValue) 进行 逻辑判断，来决定 如何 为 cell 设置 XSSFCellStyle
 * 
 * @author lsy
 */
public abstract class CellStyler {

	/**
	 * 通过解析 开发者 所指定的 styleSheet ( 样式模板页 )，存储了 styleSheet 中，所有 cell 的  XSSFCellStyle
	 * <br> 
	 * <br> key：sheet 中的 所有 cell 的 address，例如：A1、E3
	 * <br> value：每个 cell 的 style
	 */
	private Map<String, XSSFCellStyle> styleMap;
	
	
	/**
	 * 可以 通过 cellAddress 从 styleMap 获取想要的 cellStyle
	 * 
	 * @param address : 单元格 地址，例如：A1、E3
	 */
	public XSSFCellStyle getStyle(String address) {
		return styleMap.get(address);
	}
	
	
	
	/**
	 * 核心方法：根据 (XSSFCell cell, Object cellValue) 进行 逻辑判断，来决定 如何 为 cell 设置 XSSFCellStyle
	 * 
	 * @param cell : 所要操作的 单元格对象
	 * @param cellValue : 单元格对象 的 值
	 */
	public void style(XSSFCell cell, Object cellValue) {
		try {
			
			doStyle(cell, cellValue);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	public abstract void doStyle(XSSFCell cell, Object cellValue);

	
	
	/*--------------------------------------------
    |      			getter、setter		         |
    ============================================*/
	public Map<String, XSSFCellStyle> getStyleMap() {
		return styleMap;
	}
	
	public void setStyleMap(Map<String, XSSFCellStyle> styleMap) {
		this.styleMap = styleMap;
	}
	

}
